Урок 10 – Добавляем импульс к объекту и знакомимся с DeltaTime()

Для начала удалим из действия наше сообщение в консоль, просто кликнув по нему левой кнопкой мыши и нажав кнопку delete.

Далее давайте добавим такое действие как импульс.

Но прежде чем заполнять все поля импульса, давайте вспомним школьную физику, а точнее что такое Импульс.

Импульс тела обозначается как p (также называется количеством движения) – это физическая величина равная произведению массы (m, считается в килограммах) объекта на его скорость (v, считается в метрах в секунду).

p = mv.

Таким образом, импульс тела — это характеристика движения тела, которая напрямую зависит от его массы и скорости. Например, если человек бежит со скоростью 3 метра в секунду, и весит он 80кг. Тогда, чтобы найти импульс, то просто умножаем 3 на 80 и получаем 240. Т.е. импульс этого человека равен 240 кг на метр в секунду.

В GDevelop по умолчанию у всех объектов масса равна 1, а значит когда мы задаем импульс, то мы зачастую задаем только метры в секунду.

Итак, в пунктах X и Y мы должны указать направление импульса. По X у нас будет 0, т.е. объект не будет двигаться ни вправо, ни влево, а по Y мы хотели, чтобы объект двигался вверх надо использовать отрицательное число. Мы напишем -1.

Дальше мы должны указать место применения импульсы на объекте. Мы хотим применить его к центру объекта. В начале в пункте X position пишем имя объекта к которому хотим применить импульс (хотя можно подумать, зачем его писать? мы же выбрали его ранее, но так устроена программа).

Затем после точки пишем необходимое нам свойство. Здесь – это уже пришло из программирования, когда чтобы получить доступ к определенному свойству или методу (отвечает на вопрос: “Что делать?”) объекта, мы должны сперва написать имя объекта, точку, и название свойства или метода.

Необходимое нам свойство называется CenterX(), оно указывает место где в данном случае надо применить импульс, т.е. в центре объекта по X.

Тоже самое делаем по Y, только с применением CenterY().

Нажимаем кнопку Ок и запускаем игру.

Как видите, наш объект начал двигаться вверх. Вы также можете заметить, что скорость чуть-чуть, едва заметно уменьшается, так как у нас стоит Линейное Демпирование (сопротивление воздуха) на объекте равная 0.1. Давайте увеличим сопротивление воздуха до 0.5. Для этого заходим в поведение объекта и увеличиваем Linear Damping.

Проверяем.

И вы увидите что воздух стал тормозить наш объект.

А что если вы уберете условие At the beginning в условии. Т.е. наш импульс будет действовать каждый кадр игры, прибавляя предыдущее значение импульса в предыдущем кадре. Т.е. наш объект будет постоянно ускоряться.

Давайте это проверим.

Но у всех компьютеров зачастую разная частота кадров: у слабых допустим частота 30 кадров в секунду, или 30fps, у другого более мощного 90fps. И получается что у более мощного компьютера скорость будет увеличиваться быстрее. Как это исправить и сделать так, чтобы объект на разных компьютерах ускорялся одинаково.

В GDevelop есть такое значение как DeltaTime(). DeltaTime – это количество секунд, потребовавшихся движку для обработки предыдущего кадра.

Допустим наш компьютер выводит игру в 60 кадров в секунду (т.е. каждый кадр отрисовывается примерно за 16.666 миллисекунды, или 0.016 сек (так как в секунде 1 тысяча миллисекунд).

1000мс/60кадров = 16.666мс требуется на прорисовку одного кадра.

Т.e. в нашем случае импульс (равный -1) в первый кадр умножается на 0, так как это первый кадр и предыдущего за ним кадра не было. Затем второй кадр наш импульс в -1 умножается на 0.016 (это время, которое потребовалось на отрисовку предыдущего кадра, т.е. первого). И затем значения первого кадра и второго складываются, т.е. 0 + (-0.016). Далее идет третий кадр, и там мы снова умножаем -1 на 0.016 и будем складывать получившееся значение с предыдущим кадром, получится -0.032. и т.д.

А после 60 кадра у нас будет импульс уже равный -1, т.е.то что мы и указывали изначально. И независимо, сколько кадров выдают разные компьютеры, у всех после последнего кадра в секунде будут одинаковые значения.

Т.е. DeltaTime делит ваше значение (в данном случае, импульса) на количество кадров в секунду так, чтобы после последнего кадра в секунде ваше значение стало таким, которое вы указали изначально, независимо от того сколько кадров выдает ваш компьютер.

Далее, после последнего кадра второй секунды у нас импульс будет уже -2, так как значения кадров продолжают складываться.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *